/**********************************************************************************************************
** 程序文件：	JSON_Parse.h
** 程序版本：	1.0
** 开发环境：	RealView MDK-ARM 5.11
** 程序作者：	盖书永
** 修改日期：	2014年11月14日14:24:10
** 文件功能：	JSON字符串解析
** 修改日志：	
**********************************************************************************************************/
#ifndef _JSON_PARSE_H_
#define _JSON_PARSE_H_

typedef struct{	
	const char *start;	//字符串起始指针
	const char *end;	//字符串结束指针
} StrRange;				//字符串范围

/**********************************************************************************************************
* 函数名称： void JSON_Minify(char *json)
* 函数说明： 对JSON字符串进行压缩，去除空格回车注释等
* 输入参数： JSON字符串
* 返回参数： 无
**********************************************************************************************************/
void JSON_Minify(char *json);

/**********************************************************************************************************
* 函数名称： int Value_Null(StrRange *range)
* 函数说明： 判断值是否为空
* 输入参数： 字符串范围值
* 返回参数： 返回0表示值为一个空对象，返回2表示数据错误
**********************************************************************************************************/
int Value_Is_Null(StrRange *range);

/**********************************************************************************************************
* 函数名称： int Value_Boolean(StrRange *range)
* 函数说明： 解析布尔值
* 输入参数： 字符串范围值
* 返回参数： 返回0表示布尔0，返回1表示布尔1.返回2表示数据错误
**********************************************************************************************************/
int Value_Boolean(StrRange *range);

/**********************************************************************************************************
* 函数名称： int Value_Integer(StrRange *range)
* 函数说明： 解析整形字符串，返回整形值
* 输入参数： 字符串范围值
* 返回参数： 返回整形值
**********************************************************************************************************/
int Value_Integer(StrRange *range);

/**********************************************************************************************************
* 函数名称： float Value_Float(StrRange *range)
* 函数说明： 解析浮点型符串，返回单精度浮点值
* 输入参数： 字符串范围值
* 返回参数： 返回单精度浮点值
**********************************************************************************************************/
float Value_Float(StrRange *range);

/**********************************************************************************************************
* 函数名称： int Value_String_cmp(char*buf, StrRange *range)
* 函数说明： 目标字符串与规定范围的字符串进行比较
* 输入参数： 目标缓存区，字符串范围值
* 返回参数： 返回0表示字符串内容一致，返回1表示字符串内容不一致
**********************************************************************************************************/
int Value_String_cmp(const char*buf, StrRange *range);

/**********************************************************************************************************
* 函数名称： void Value_String_copy(char*buf, StrRange *range)
* 函数说明： 将给定范围内的字符串复制到目标区域
* 输入参数： 目标缓存区，字符串范围值
* 返回参数： 无
**********************************************************************************************************/
void Value_String_copy(char*buf, StrRange *range);

/**********************************************************************************************************
* 函数名称： int Value_StringLen(StrRange *range)
* 函数说明： 获取字符串值的长度
* 输入参数： 字符串范围值
* 返回参数： 字符串长度
**********************************************************************************************************/
int Value_StringLen(StrRange *range);

/**********************************************************************************************************
* 函数名称： char *Value_String_malloc(StrRange *range)
* 函数说明： 将给定范围内的字符串复制到新开辟的内存中，并返回内存的首地址
* 输入参数： 字符串范围值
* 返回参数： 新字符串地址
**********************************************************************************************************/
char *Value_String_malloc(StrRange *range);

/**********************************************************************************************************
* 函数名称： char *Value_String_ram_malloc(StrRange *range)
* 函数说明： 将给定范围内的字符串复制到新开辟的内存中，并返回内存的首地址
* 输入参数： 字符串范围值
* 返回参数： 新字符串地址
**********************************************************************************************************/
char *Value_String_ram_malloc(StrRange *range);

/**********************************************************************************************************
* 函数名称： int JSON_GetObjectItem(const char *c, const char *string, StrRange *range)
* 函数说明： 查询对象，并获取对象的值
* 输入参数： JSON字符串，对象字符串，返回对象值字符串范围
* 返回参数： 返回值的字符长度，返回-1字符串错误
**********************************************************************************************************/
int JSON_GetObjectItem(const char *c, const char *string, StrRange *range);

/**********************************************************************************************************
* 函数名称： int JSON_GetArrayItem(const char*c, int item, StrRange *range)
* 函数说明： 根据索引获取JSON数组中对应的项，将结果返回到范围指针
* 输入参数： JSON字符串，数组所以号，返回对象值字符串范围指针
* 返回参数： 返回0表示查询到并将结果保存到范围指针，返回1数组为空，返回2数组溢出。
**********************************************************************************************************/
int JSON_GetArrayItem(const char*c, int item, StrRange *range);

/**********************************************************************************************************
* 函数名称： int JSON_GetArraySize(const char *c)
* 函数说明： 获取JSON数组大小
* 输入参数： JSON数组字符串
* 返回参数： 返回JSON数组大小
**********************************************************************************************************/
int JSON_GetArraySize(const char *c);

/**********************************************************************************************************
* 函数名称： int StringEscapeParse(char *str)
* 函数说明： 转义的字符串进行解析
* 输入参数： 字符串
* 返回参数： 字符串大小
**********************************************************************************************************/
int StringEscapeParse(char *str);

/**********************************************************************************************************
* 函数名称:	 int StringEscapeNumber(char *str)
* 函数说明： 统计字符串中双引号、回车、换行总数量
* 输入参数： 字符串
* 返回参数： 统计数量
**********************************************************************************************************/
int StringEscapeNumber(char *str);

/**********************************************************************************************************
* 函数名称:	 int StringEscapeEncoding(char *des, char *src)
* 函数说明： 字符串内双引号、回车、换行符进行转义编码
* 输入参数： 目标字符串缓存区，源字符串缓存区
* 返回参数： 转换后字符串长度
**********************************************************************************************************/
int StringEscapeEncoding(char *des, char *src);

/**********************************************************************************************************
* 函数名称： int IsValidIP(const char *ip) 
* 函数说明： IP地址字符串验证
* 输入参数： ip字符串
* 返回参数： 0：失败，1：成功
**********************************************************************************************************/
int IsValidIP(const char *ip);

/**********************************************************************************************************
* 函数名称： int HexToString(unsigned char *buf, int buflen, char *hexstr, int hexstrsize)
* 函数说明： 十六进制数据转十六进制字符串	如：{0xC8,0x32,0x9B,0xFD,0x0E,0x01}-->"C8329BFD0E01"
* 输入参数： 十六进制数据指针，十六进制缓存区长度，十六进制字符串缓存区指针，十六进制字符串缓存空间大小
* 返回参数： 十六进制字符串长度
**********************************************************************************************************/
int HexToString(void *buf, int buflen, void *hexstr, int hexstrsize);

/**********************************************************************************************************
* 函数名称： int StringToHex(void *hexstr, int hexstrlen, void *buf, int bufsize)
* 函数说明： 十六进制字符串穿十六进制数据	如：  "C8329BFD0E01"-->{0xC8,0x32,0x9B,0xFD,0x0E,0x01}
* 输入参数： 十六进制字符串指针，十六进制字符串长度，十六进制数据缓存区指针，十六进制缓存区空间长度
* 返回参数： 十六进制数据长度
**********************************************************************************************************/
int StringToHex(void *hexstr, int hexstrlen, void *buf, int bufsize);


#endif






